package com.tedu.API.list;

import org.junit.Test;

import java.util.*;

/**
 * Set集合是Collection集合子接口
 * Set集合接口: 无序、无下标、元素不可复制【唯一性】
 * Set集合方法与Collection集合方法【使用一致】
 * add()  remove() contains() size() clear()
 * 使用Iterator迭代器遍历
 * Set集合---接口---无法创建对象---实现类:
 *  HashSet: 由哈希算法实现，保存数据速度快，
 *           但不保证元素顺序，且不允许元素重复，可以存null
 *  LinkedHashSet:【方法与HashSet一致】，由哈希算法实现，保持元素顺序
 *                不允许元素重复，可以存null
 *  TreeSet【算法: 红黑树】: 不可以存null，按照元素自然顺序或者指定比较器进行
 *                        元素存储，不允许元素重复
 */
public class SetAPI {
    @Test
    public void testSet(){
        //Set集合与HashSet方法完全一致
        Set<String> set=new HashSet<>();
        set.add("玉麟香腰");set.add("浪花东星斑");
        set.add("应山滑肉");set.add("金玉满堂");
        set.add("应山滑肉");set.add(null);set.add(null);
        System.out.println("Set集合: "+set);
        boolean b=set.contains("应山滑肉");
        System.out.println("判断Set集合是否存在【应山滑肉】元素"+b);
        System.out.println("判断Set集合长度: "+set.size());
        //Iterator遍历 set  集合  元素
        //1.通过set集合调用 iterator()  获取迭代器实例:Iterator
         Iterator<String> it=set.iterator();
        //2.Iterator遵循: 问、取、删   删掉"应山滑肉"元素
        while (it.hasNext()){  //问: set集合有没有元素---有: true
            String str=it.next();  //取: set集合元素
            // null  引用类型默认值      不是字符串
            // 判断明确的值   必须  ==(意思为--判断)
            // 判断字符串/对象是否相等   equals
            // 输出效果: "应山滑肉".equals(str)  实值  (字符串)
            //          obj.equals(add)       地址值 (对象)
            if(str==null){   //如果"应山滑肉"等于"应山滑肉"元素
                     it.remove();//删
            }
        }
        System.out.println("set集合： "+set);

    }

}
